﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SoftHotel.Models;
using System.Data.Entity;
using System.Data;

namespace SoftHotel.Controllers
{
    public class SedesController : Controller
    {
        public ParametroDAO parametroDao = new ParametroDAO();
        public SedeDAO sedeDao = new SedeDAO();

        //
        // GET: /Sedes/

        public ActionResult Index()
        {
            ViewBag.tipo = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_SEDE"), "idParametro", "valor");
            ViewBag.categoria = new SelectList(parametroDao.parametros.Where(u => u.tipo == "CATEGORIA"), "idParametro", "valor");
            ViewBag.departamento = new SelectList(parametroDao.parametros.Where(u => u.tipo == "DEPARTAMENTO"), "idParametro", "valor");
            ViewBag.provincia = new SelectList(parametroDao.parametros.Where(u => u.tipo == "PROVINCIA"), "idParametro", "valor");
            ViewBag.estado = new SelectList(parametroDao.parametros.Where(u => u.tipo == "ESTADO_SEDE"), "idParametro", "valor");
            return View();
        }

        //
        // POST: /Ambientes/

        [HttpPost]
        public ActionResult Index(Sede sede, string button)
        {
            if (button == "Buscar")
            {
                return RedirectToAction("Search", "Sedes", sede);
            }
            else
            {
                return RedirectToAction("Create", "Sedes");
            }
        }

        //
        // GET: /Ambientes/Search

        public ActionResult Search(Sede sede)
        {
            var listaSedes = sedeDao.sedes.Where(a => a.idSede > 0);

            listaSedes = listaSedes.Include(a => a.pTipo);
            listaSedes = listaSedes.Include(a => a.pCategoria);
            listaSedes = listaSedes.Include(a => a.pDepartamento);
            listaSedes = listaSedes.Include(a => a.pProvincia);
            listaSedes = listaSedes.Include(a => a.pEstado);

            if (sede.tipo != 0)
            {
                listaSedes = listaSedes.Where(a => a.tipo == sede.tipo);
            }
            if (sede.categoria != 0)
            {
                listaSedes = listaSedes.Where(a => a.categoria == sede.categoria);
            }
            if (sede.pisos != 0)
            {
                listaSedes = listaSedes.Where(a => a.pisos == sede.pisos);
            }
            if (sede.nombre != null)
            {
                listaSedes = listaSedes.Where(a => a.nombre == sede.nombre);
            }
            if (sede.departamento != 0)
            {
                listaSedes = listaSedes.Where(a => a.departamento == sede.departamento);
            }
            if (sede.provincia != 0)
            {
                listaSedes = listaSedes.Where(a => a.provincia == sede.provincia);
            }
            if (sede.direccion != null)
            {
                listaSedes = listaSedes.Where(a => a.direccion == sede.direccion);
            }
            if (sede.descripcion != null)
            {
                listaSedes = listaSedes.Where(a => a.descripcion == sede.descripcion);
            }
            if (sede.estado != 0)
            {
                listaSedes = listaSedes.Where(a => a.estado == sede.estado);
            }

            return View(listaSedes);
        }

        //
        // POST: /Ambientes/Create

        [HttpPost]
        public ActionResult Search(string button)
        {
            if (button == "Nuevo")
            {
                return RedirectToAction("Create", "Sedes");
            }
            if (button == "Regresar")
            {
                return RedirectToAction("Index", "Sedes");
            }
            return RedirectToAction("Search", "Sedes");
        }

        //
        // GET: /Ambientes/Create

        public ActionResult Create()
        {
            ViewBag.tipo = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_SEDE"), "idParametro", "valor");
            ViewBag.categoria = new SelectList(parametroDao.parametros.Where(u => u.tipo == "CATEGORIA"), "idParametro", "valor");
            ViewBag.departamento = new SelectList(parametroDao.parametros.Where(u => u.tipo == "DEPARTAMENTO"), "idParametro", "valor");
            ViewBag.provincia = new SelectList(parametroDao.parametros.Where(u => u.tipo == "PROVINCIA"), "idParametro", "valor");
            return View();
        }

        //
        // POST: /Ambientes/Create

        [HttpPost]
        public ActionResult Create(Sede sede)
        {
            // Toda sede nueva tendrá como estado Activo
            Parametro parametro = parametroDao.parametros.First(p => p.tipo == "ESTADO_SEDE" && p.valor == "Activo");
            sede.estado = parametro.idParametro;

            if (ModelState.IsValid)
            {
                sedeDao.sedes.Add(sede);
                sedeDao.SaveChanges();
                return RedirectToAction("Index");
            }

            ViewBag.tipo = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_SEDE"), "idParametro", "valor");
            ViewBag.categoria = new SelectList(parametroDao.parametros.Where(u => u.tipo == "CATEGORIA"), "idParametro", "valor");
            ViewBag.departamento = new SelectList(parametroDao.parametros.Where(u => u.tipo == "DEPARTAMENTO"), "idParametro", "valor");
            ViewBag.provincia = new SelectList(parametroDao.parametros.Where(u => u.tipo == "PROVINCIA"), "idParametro", "valor");
            return View();
        }

        //
        // GET: /Ambientes/Edit/5

        public ActionResult Edit(int id)
        {
            var listaSedes = sedeDao.sedes.Include(s => s.pTipo).Include(s => s.pCategoria).Include(s => s.pDepartamento).Include(s => s.pProvincia).Include(s => s.pEstado);
            Sede sede = listaSedes.First(s => s.idSede == id);
            
            ViewBag.tipo = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_SEDE"), "idParametro", "valor", sede.tipo);
            ViewBag.categoria = new SelectList(parametroDao.parametros.Where(u => u.tipo == "CATEGORIA"), "idParametro", "valor", sede.categoria);
            ViewBag.departamento = new SelectList(parametroDao.parametros.Where(u => u.tipo == "DEPARTAMENTO"), "idParametro", "valor", sede.departamento);
            ViewBag.provincia = new SelectList(parametroDao.parametros.Where(u => u.tipo == "PROVINCIA"), "idParametro", "valor", sede.provincia);
            ViewBag.estado = new SelectList(parametroDao.parametros.Where(u => u.tipo == "ESTADO_SEDE"), "idParametro", "valor", sede.estado);

            return View(sede);
        }

        //
        // POST: /Ambientes/Edit/5

        [HttpPost]
        public ActionResult Edit(Sede sede)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    sedeDao.Entry(sede).State = EntityState.Modified;
                    sedeDao.SaveChanges();
                    return RedirectToAction("Index");
                }
                ViewBag.tipo = new SelectList(parametroDao.parametros.Where(u => u.tipo == "TIPO_DE_SEDE"), "idParametro", "valor", sede.tipo);
                ViewBag.categoria = new SelectList(parametroDao.parametros.Where(u => u.tipo == "CATEGORIA"), "idParametro", "valor", sede.categoria);
                ViewBag.departamento = new SelectList(parametroDao.parametros.Where(u => u.tipo == "DEPARTAMENTO"), "idParametro", "valor", sede.departamento);
                ViewBag.provincia = new SelectList(parametroDao.parametros.Where(u => u.tipo == "PROVINCIA"), "idParametro", "valor", sede.provincia);
                ViewBag.estado = new SelectList(parametroDao.parametros.Where(u => u.tipo == "ESTADO_SEDE"), "idParametro", "valor", sede.estado);
                return View();
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Ambientes/Delete/5

        public ActionResult Delete(int id)
        {
            var listaAmb = sedeDao.sedes.Include(s => s.pTipo).Include(s => s.pCategoria).Include(s => s.pDepartamento).Include(s => s.pProvincia).Include(s => s.pEstado);
            Sede sede = listaAmb.First(s => s.idSede == id);
            return View(sede);
        }

        //
        // POST: /Ambientes/Delete/5

        [HttpPost]
        public ActionResult Delete(Sede sede, string button)
        {
            if (button == "Aceptar")
            {
                var listaAmb = sedeDao.sedes.Include(s => s.pTipo).Include(s => s.pCategoria).Include(s => s.pDepartamento).Include(s => s.pProvincia).Include(s => s.pEstado);
                Sede sedeAux = listaAmb.First(s => s.idSede == sede.idSede);
                Parametro parametro = parametroDao.parametros.First(p => p.tipo == "ESTADO_SEDE" && p.valor == "Inactivo");
                sedeAux.estado = parametro.idParametro;
                sedeDao.Entry(sedeAux).State = EntityState.Modified;
                sedeDao.SaveChanges();
            }
            return RedirectToAction("Index", "Sedes");
        }
    }
}
